home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ahoy 1985 December
/
Ahoy_Magazine_85-12_1985_Double_L.d64
/
video setup
(
.txt
)
< prev
Wrap
Commodore BASIC
|
2022-10-26
|
11KB
|
301 lines
1 rem *** video setup ***
2 rem creates 'gypsy video' for 'gypsy'
5 poke 55,255:poke 56,127:poke 643,255:poke 644,127:print "[147]"
7 f$=" ":c0%=0:c1%=0:c2%=0:c3%=0:c4%=0:c5%=0:c6%=0:sp%=0
8 def fn pg(x)=int(x/256):def fn lo(x)=x-256*(int(x/256))
10 gosub 90:gosub 600
12 print "[147]";:gosub 95:gosub 700:gosub 2000
13 gosub 900
14 sys 38046:poke 648,140
15 rem ** enable sprites
16 for i=0 to 199:next:poke es,31:poke 36839,32
17 print ll$bl$ll$"press button[146] to create 'gypsy video'";:goto 100
19 rem ** load subroutine
20 for i=xb to xe:read a:poke i,a:next:print ".[146]";:return
90 poke 53265,0:return
95 poke 53265,91:return
98 rem *** action loop ***
100 if c0%>0 then c0%=0:goto 300
196 goto 100
298 rem *** end handling ***
299 rem ** put video memory back to first block, and screen memory to 1024
300 gosub 90:poke es,0:rem disable sprites
304 rem restore video/screen memory
305 poke 56578,peek(56578)or3:poke 56576,(peek(56576)and 252)or 3
310 poke 53272,20:poke 648,4:sys 40768
360 poke 37894,peek(45):poke 37895,peek(46)
365 poke 43,0:poke 44,128:poke 45,255:poke 46,159
370 save "@0:gypsy video",8,1
375 poke 43,1:poke 44,8:poke 45,peek(37894):poke 46,peek(37895)
380 poke 657,0:poke 792,71:poke 808,237
385 gosub 95:poke 37952,0:poke 37953,0
390 sys 65126
598 rem *** arrange memory ***
600 vb=32768:poke 56578,peek(56578)or3:poke 56576,(peek(56576)and 252)or 1
602 sb=0:poke 53272,(sb*16)+4:sb=vb+1024*sb
604 bb=sb/256:poke 648,bb
611 rem ** sprite color table
612 ct(0)=53287:for i=1 to 7:ct(i)=ct(i-1)+1:next
614 ht(0)=53248:for i=1 to 7:ht(i)=ht(i-1)+2:next
616 vt(0)=53249:for i=1 to 7:vt(i)=vt(i-1)+2:next
618 hr=53264
620 es=53269
622 poke 53271,0:poke 53277,0:poke 53275,0:poke 53276,30
628 em=53276
630 poke 53285,15:poke 53286,7
635 for i=0 to 7:bc(i)=255-bs(i):next
638 rem *** initialize values ***
640 print "[154]";
642 poke 53281,0
644 poke 53280,0
646 poke ct(0),7:poke ct(1),5:poke ct(2),2:poke ct(3),6:poke ct(4),12
659 rem *** ml table setup ***
661 poke 37920,4:poke 37921,4
663 poke 37922,1
665 poke 37923,0
667 poke 37924,1:poke 37925,1
669 poke 37936,1
671 poke 37940,1
673 poke 37941,0
675 poke 37926,3:poke 37928,3
677 poke 37927,0:poke 37935,0:poke 37943,0
679 poke 53282,1:poke 53283,7:poke 53284,9
694 poke 657,128
696 return
699 rem *** intro screen ***
700 print "[147]"tab(14)"[199][217][208][211][217][160][208][201][204][207][212]"
710 print:print tab(6)"[217][207][213][210][160][211][200][201][208][160][201][211][160][194][197][201][206][199][160][208][210][197][208][193][210][197][196][146]":print:print
715 return
898 rem *** sprite positions ***
900 for i=1 to 4:poke ht(i),20+int(rnd(9)*220)
901 poke vt(i),50+int(rnd(9)*190):next
902 poke hr,0
909 rem ** put stars on the screen
910 print "[147]";:for i=0 to 49:poke vb+int(rnd(9)*1024),46:next
915 for i=0 to 8:poke vb+int(rnd(9)*1024),42:next
919 rem ** starship position
920 poke 53248,175:poke 53249,150
921 rem ** starship direction
922 poke vb+1016,16
930 ll$=""
931 bl$=" ":bl$=bl$+bl$+" "
946 return
1998 rem *** machine language ***
1999 rem ** startup sys routine
2000 poke 37888,peek(788):poke 37889,peek(789)
2001 xb=38046:xe=38079:gosub 20
2002 rem set interr.vector to interr.handler#1 and scanline 234
2003 rem sei lda#0 sta 788 lda#154 sta 789 lda#234 sta 53266
2004 data 120,169,0,141,20,3,169,154,141,21,3,169,234,141,18,208
2005 rem high bit, enable scan interr., disable timer interr., quit
2006 rem lda 53265 and#127 sta 53265 lda#1 sta 53274 sta 56333 cli rts
2007 data 173,17,208,41,127,141,17,208,169,1,141,26,208,141,13,220,88,96
2019 rem *** animation shell ***
2020 xb=38144:xe=38176:gosub 20
2023 data 206,32,148,240,3,108,10,148
2026 data 173,33,148,141,32,148
2029 data 206,34,148,208,5,169,8,141,34,148,174,34,148,202
2032 data 173,35,148,240,6
2035 a=192:b=248:for i=38177 to 38219 step 6:poke i,189:poke i+1,a:poke i+2,148
2036 poke i+3,141:poke i+4,b:poke i+5,131:a=a+8:b=b+1:next
2039 poke 38225,108:poke 38226,10:poke 38227,148
2049 rem *** movement counter ***
2050 xb=38272:xe=38288:gosub 20
2051 x=38272:poke 37896,fn lo(x):poke 37897,fn pg(x)
2052 poke 37898,fn lo(x):poke 37899,fn pg(x)
2055 data 206,36,148,240,3,108,12,148
2058 data 173,37,148,141,36,148,108,2,148
2059 rem ** bitset subroutine **
2060 xb=38314:xe=38323:gosub 20
2063 data 185,74,148,13,16,208,141,16,208,96
2069 rem ** bitclear subroutine **
2070 xb=38324:xe=38335:gosub 20
2073 data 185,74,148,73,255,45,16,208,141,16,208,96
2099 rem *** xmove ***
2100 xb=38400:xe=38467:gosub 20
2103 data 169,1,57,75,148,240,3,32,128,150
2109 data 169,2,57,75,148,240,3,32,192,150
2119 data 169,4,57,75,148,240,17,185,74,148,45,16,208,240,6
2122 data 32,0,151,76,44,150,32,64,151
2128 data 169,8,57,75,148,208,1,96,185,74,148,45,16,208,240,4
2131 data 32,128,151,96,32,192,151,96
2139 rem *** upmove subroutine ***
2140 xb=38528:xe=38561:gosub 20
2143 data 190,1,208,202,138,217,90,148,208,3,32,146,150,138,153,1,208,96
2146 data 173,48,148,208,4,232,76,247,149,190,91,148,202,76,247,149
2159 rem *** downmove subroutine ***
2160 xb=38592:xe=38625:gosub 20
2163 data 190,1,208,232,138,217,91,148,208,3,32,210,150,138,153,1,208,96
2166 data 173,48,148,208,4,202,76,247,149,190,90,148,232,76,247,149
2179 rem *** leftmove (hi bit set) ***
2180 xb=38656:xe=38669:gosub 20
2183 data 190,0,208,202,16,3,32,180,149,138,153,0,208,96
2199 rem *** leftmove (hi bit clr) ***
2200 xb=38720:xe=38756:gosub 20
2203 data 190,0,208,202,138,217,106,148,208,3,32,82,151,138,153,0,208,96
2206 data 173,48,148,208,4,232,76,247,149,190,107,148,202,32,170,149,76,247,149
2219 rem *** rightmve (hi bit set) ***
2220 xb=38784:xe=38820:gosub 20
2223 data 190,0,208,232,138,217,107,148,208,3,32,146,151,138,153,0,208,96
2226 data 173,48,148,208,4,202,76,247,149,190,106,148,232,32,180,149,76,247,149
2239 rem *** rightmve (hi bit clr) ***
2240 xb=38848:xe=38861:gosub 20
2243 data 190,0,208,232,208,3,32,170,149,138,153,0,208,96
2399 rem *** basic movement handler ***
2400 xb=38336:xe=38346:gosub 20
2403 data 160,59,177,45,170,188,56,148,76,0,150
2469 rem ** report non-sprite-0 wraps and edges to basic
2470 xb=38391:xe=38399:gosub 20
2473 data 192,0,208,1,96,140,55,148,96
2499 rem *** read joystick ***
2500 xb=38912:xe=38972:gosub 20
2502 x=38912:poke 37890,fn lo(x):poke 37891,fn pg(x)
2508 data 173,0,220,141,45,148,41,16,208,8,169,1,141,39,148,32,0,153
2511 data 173,45,148,41,15,201,15,208,3,108,12,148,73,15,141,75,148,32,128,152
2514 data 160,0,32,0,150,32,160,152,173,4,148,141,10,148
2516 data 173,5,148,141,11,148,108,12,148
2529 rem *** interr.move.handler ***
2530 xb=38976:xe=39009:gosub 20
2531 poke 37892,fn lo(xb):poke 37893,fn pg(xb)
2534 data 160,0,32,0,150,32,160,152
2537 data 206,40,148,208,243,173,38,148,141,40,148
2540 data 173,8,148,141,10,148,173,9,148,141,11,148,108,12,148
2549 rem *** set shape 0 ***
2550 xb=39040:xe=39057:gosub 20
2553 data 173,35,148,208,9,172,75,148,185,63,148,141,248,131,32,64,153,96
2569 rem ** sprite 0 collision routine
2570 xb=39072:xe=39111:gosub 20
2573 data 173,52,148,240,16,173,30,208,141,41,148,41,1,240,6
2575 data 32,80,153,76,208,152
2578 data 173,53,148,240,13,173,31,208,41,1,240,3,32,112,153,76,208,152,96
2579 rem ** unmove **
2580 xb=39120:xe=39148:gosub 20
2583 data 169,1,141,40,148,172,75,148,185,121,148,141,75,148
2586 data 160,0,32,0,150,172,75,148,185,121,148,141,75,148,96
2599 rem ** interrupt handler 1 **
2600 xb=39424:xe=39449:gosub 20
2601 for i=36856 to 36860:poke i,48:next
2602 rem clear interr.flag, reset vector, set new scanline
2603 rem lda#15 sta 53273 lda#64 sta 788 lda#254 sta 53266
2604 data 169,15,141,25,208,169,64,141,20,3,169,254,141,18,208
2605 rem change screen pointer and quit
2606 rem lda#52 sta 53272 pla tay pla tax pla rti
2607 data 169,52,141,24,208,104,168,104,170,104,64
2615 for i=35840 to 35903:poke i,0:next
2620 xb=39488:xe=39510:gosub 20
2621 rem clear interr.flag, reset vector, set new scanline
2622 rem lda#15 sta 53273 lda#0 sta 788 lda#234 sta 53266
2623 data 169,15,141,25,208,169,0,141,20,3,169,234,141,18,208
2624 rem set screen pointer, jump to anim. shell
2625 rem lda#4 sta 53272 jmp 38144
2626 data 169,4,141,24,208,76,0,149
2699 rem ** basic variable subroutines
2700 xb=39168:xe=39174:gosub 20
2701 rem ** report firebutton - c0%
2703 data 160,10,169,1,145,45,96
2709 rem ** report sprites to basic
2710 xb=39184:xe=39222:gosub 20
2711 rem c1%=edgewrap, c2%=s/s collis.
2713 data 160,17,173,55,148,240,2,145,45,160,24,173,49,148,240,2,145,45
2714 rem c3%=s/foreg.collis.
2716 data 160,31,173,50,148,240,2,145,45
2718 data 169,0,141,49,148,141,50,148,141,55,148,96
2719 rem ** report movement
2720 xb=39232:xe=39241:gosub 20
2721 rem c4%
2723 data 160,38,169,1,145,45,141,47,148,96
2729 rem ** report sprite 0 bounce/s
2730 xb=39248:xe=39257:gosub 20
2731 rem c5%
2733 data 160,45,173,41,148,41,254,145,45,96
2739 rem ** report sprite 0 bounce/f
2740 xb=39280:xe=39289:gosub 20
2741 rem c6%
2743 data 160,52,169,1,145,45,141,42,148,96
2898 rem *** wrapup ***
2900 xb=40704:xe=40741:gosub 20
2901 rem ** set collision vector
2902 x=40704:poke 37900,fn lo(x):poke 37901,fn pg(x)
2908 data 173,30,208,141,49,148,173,31,208,141,50,148,32,16,153
2909 rem move the next planet
2910 rem ldx 37934 dex bne+2 ldx #4 stx 37934 ldy(37944),x jsr 38400
2911 data 174,46,148,202,208,2,162,4,142,46,148,188,56,148,32,0,150
2915 rem end interrupt routine
2916 rem pla,tay,pla,tax,pla,rti
2917 data 104,168,104,170,104,64
2949 rem ** restore video (unsys)
2950 xb=40768:xe=40792:gosub 20
2951 rem set interr. vector to normal housekeeping, timed interrupts
2952 rem sei lda 37888 sta 788 lda 37889 sta 789
2953 data 120,173,0,148,141,20,3,173,1,148,141,21,3
2954 rem lda#0 sta 53274 lda#129 sta 56333 cli rts
2955 data 169,0,141,26,208,169,129,141,13,220,88,96
2998 rem *** set up sprite shapes ***
2999 rem ** planets
3000 for i=34304 to 34816 step 512:for j=0 to 448 step 64:for k=0 to 20
3001 read a:poke i+j+k,a:next
3002 for k=21 to 63:poke i+j+k,0:next:next:gosub 3985:next
3009 rem ** planet 1 shape data
3010 data 0,40,0,0,175,0,82,191,192,82,175,128,2,191,128,0,171,0,0,40,0
3011 data 0,40,0,0,190,0,2,255,128,5,190,128,5,254,128,0,175,0,0,40,0
3012 data 0,40,0,0,250,0,3,254,128,2,90,128,3,90,128,0,190,0,0,40,0
3013 data 0,40,0,0,234,0,3,250,128,3,229,128,3,229,128,0,250,0,0,40,0
3014 data 0,40,0,0,170,0,3,234,80,3,170,80,3,170,128,0,234,0,0,40,0
3015 data 0,40,0,0,170,20,3,170,212,2,170,128,2,170,192,0,170,0,0,40,0
3016 data 0,40,0,0,170,64,2,171,192,2,170,192,2,171,192,0,170,0,0,40,0
3017 data 0,40,0,5,171,0,6,175,192,2,171,192,2,175,192,0,170,0,0,40,0
3019 rem ** planet 2 shape data
3020 data 0,40,0,3,170,192,62,170,148,162,170,143,42,255,252,2,255,192,0,40,0
3021 data 0,40,0,3,106,192,61,106,188,241,106,143,62,171,252,2,171,192,0,40,0
3022 data 0,24,0,3,90,192,61,90,188,81,90,143,63,234,188,3,234,128,0,24,0
3023 data 0,20,0,3,86,192,61,86,188,241,86,138,61,255,168,1,255,128,0,20,0
3024 data 0,20,0,3,85,128,61,85,104,241,85,74,63,223,252,3,223,192,0,20,0
3025 data 0,20,0,3,149,192,62,149,124,242,149,79,63,253,252,3,253,192,0,20,0
3026 data 0,40,0,2,169,192,62,169,124,242,169,79,63,255,252,3,255,192,0,40,0
3027 data 0,40,0,2,170,0,42,170,188,162,170,143,63,255,212,3,255,192,0,40,0
3058 gosub 3985
3059 rem ** sprite animation tables
3060 for i=38088 to 38112 step 8:for j=0 to 7:read a:poke i+j,a:next:next
3061 rem ** animation table data
3062 data 24,25,26,27,28,29,30,31
3063 data 32,33,34,35,36,37,38,39
3064 data 27,26,25,24,31,30,29,28
3065 data 37,36,35,34,33,32,39,38
3098 rem *** sprite 0 shapes ***
3099 rem ** sprite 0 direction table
3100 for i=37952 to 37961:read a:poke i,a:next:gosub 3985
3101 data 16,20,0,22,23,21,0,18,17,19
3102 rem ** sprite 0 animation table
3103 for i=0 to 7:poke 38080+i,16+i:next
3104 rem ** sprite 0 shapes
3105 for i=33792 to 34240 step 64:for j=0 to 18 step 3
3106 read a:poke i+j,a:poke i+j+1,0:poke i+j+2,0:next
3107 for j=21 to 63:poke i+j,0:next:next:gosub 3985
3109 rem ** sprite 0 data
3110 data 8,28,28,28,54,34,0
3111 data 6,14,28,120,240,48,32
3112 data 0,224,62,31,62,224,0
3113 data 32,48,240,120,28,14,6
3114 data 0,34,54,28,28,28,8
3115 data 4,12,15,30,56,112,96
3116 data 0,7,124,248,124,7,0
3117 data 96,112,56,30,15,12,4
3298 rem ** sprite movement data
3300 x=0:for i=37944 to 37951:poke i,x:x=x+2:next
3305 x=1:for i=37962 to 37976 step 2:poke i,x:x=x*2:next
3310 for i=37963 to 37977 step 2:read a:poke i,a:next
3311 data 0,5,6,10,9,0,0,0
3316 for i=37978 to 37992 step 2:read a:poke i,a:next
3317 data 50,43,43,43,43,43,43,43
3319 for i=37979 to 37993 step 2:read a:poke i,a:next
3320 data 231,242,242,242,242,242,242,242
3322 for i=37994 to 38008 step 2:read a:poke i,a:next
3323 data 23,0,0,0,0,0,0,0
3325 for i=37995 to 38009 step 2:read a:poke i,a:next
3326 data 80,87,87,87,87,87,87,87
3328 for i=38010 to 38019:read a:poke i,a:next
3329 data 2,1,0,8,10,9,0,4,6,5
3331 poke 37934,1
3985 print "![146]";
3990 return